package Thread;

class SingletonLazy{
  volatile private static SingletonLazy instance;
    public static SingletonLazy getInstance(){
        if(instance == null){
            synchronized (SingletonLazy.class){
                if(instance == null){
                    instance = new SingletonLazy();
                }
            }
        }
        //除了第一次new的时候,其余都是只进行一次if就好
        return instance;
    }
    private SingletonLazy(){};//构造方法设置为私有,这样的话就不可以从外部去new

}
//懒汉模式
//核心思想:无需要不创建
public class ThreadDemo14 {
    public static void main(String[] args) {

    }
}

//小结:恶汉模式总是安全的,因为只涉及到了读操作
//    懒汉模式是不安全的,因为涉及到了new操作,再多线程的环境下可能会触发指令重排序,所以需要volatile关键词修饰
//    1.if和new加锁,让他具有原子性
//    2.外层在套一个if判断,这样可以节省很多加锁解锁的时间
//    3.用volatile修饰这样可以避免指令重排序导致出现不可预料的问题